package com.foreveross.pushsdk.core;

import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.provider.Settings.Secure;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 生成应用程序的唯一标示
 * android.permission.ACCESS_WIFI_STATE
 *
 * @author Huang Li
 * @version Create：2014年5月22日
 */
public class UniqueIdMaker {
	public static String getUnique(Context context) {
		String m_szDevIDShort = "35" +  Build.BOARD.length()%10+ Build.BRAND.length()%10 
				+ Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10
				+ Build.DISPLAY.length()%10 + Build.HOST.length()%10
				+ Build.ID.length()%10 + Build.MANUFACTURER.length()%10 
				+ Build.MODEL.length()%10 + Build.PRODUCT.length()%10 
				+ Build.TAGS.length()%10 + Build.TYPE.length()%10 
				+ Build.USER.length()%10 ;
		String m_szAndroidID = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
		
		WifiManager wm = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
		String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
		 
		String m_szLongID =  m_szDevIDShort + m_szAndroidID+ m_szWLANMAC ;      
		// compute md5     
		 MessageDigest m = null;   
		try {
		 m = MessageDigest.getInstance("MD5");
		 } catch (NoSuchAlgorithmException e) {
		 e.printStackTrace();   
		}    
		m.update(m_szLongID.getBytes(),0,m_szLongID.length());   
		// get md5 bytes   
		byte p_md5Data[] = m.digest();   
		// create a hex string   
		String m_szUniqueID = new String();   
		for (int i=0;i<p_md5Data.length;i++) {   
		     int b =  (0xFF & p_md5Data[i]);    
		// if it is a single digit, make sure it have 0 in front (proper padding)    
		    if (b <= 0xF) 
		        m_szUniqueID+="0";    
		// add number to string    
		    m_szUniqueID+=Integer.toHexString(b); 
		   }   // hex string to uppercase   
		m_szUniqueID = m_szUniqueID.toUpperCase();
		return m_szUniqueID;
	}
}
